package magazyn.controller;


import java.util.List;




import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

import magazyn.model.Magazyn;
import magazyn.util.HibernateUtil;

public class MagazynManager extends HibernateUtil{

	/**
	 * Metoda wyswietlajaca aktualny stan z magazynu
	 * 
	 */
	public List<Magazyn> aktualnyStan(){
			
			Session session = HibernateUtil.getSessionFactory().getCurrentSession();
			session.beginTransaction();
			
			List<Magazyn> magazyn = null;
			try{
				
				Query q = session.createQuery("select m from Magazyn m LEFT JOIN FETCH m.id_produktu");
				
				magazyn = q.list();
				
			} catch (HibernateException e) {
				e.printStackTrace();
				session.getTransaction().rollback();
			
			}		
		
			session.getTransaction().commit();
			return magazyn;
			
		}
	
	/**
	 * Metoda wyswietlajaca liste towarow ktore sie koncza (aktualny stan jest mniejszy od 5)
	 * 
	 */
	public List<Magazyn> coSieKonczy(){
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		
		List<Magazyn> produkty = null;
		try{
			
			Query q = session.createQuery("select m from Magazyn m LEFT JOIN FETCH m.id_produktu where m.aktualny_stan <= 5");
			produkty = q.list();

			
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		
		}		
	
		session.getTransaction().commit();
		return produkty;
		
	}
	
	/**
	 * Metoda usuwajaca z Magazynu poszczegolne wartosci.
	 * (Odejmuje od aktualnego stanu podana wartosc)
	 */
	public Magazyn usunZMagazynu(Magazyn magazyn){
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
				
		int ilosc = magazyn.getAktualny_stan() - magazyn.getSztuki();
			
		magazyn = (Magazyn) session.load(Magazyn.class, magazyn.getId_magazynu());
		magazyn.setAktualny_stan(ilosc);
		session.update(magazyn);
		
		session.getTransaction().commit();
		
		return magazyn;
	}
	
		
	

}
